package com.ruoyi.ky450.service;

import java.util.List;
import java.util.UUID;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.ky450.domain.*;
import com.ruoyi.ky450.dto.*;
import com.ruoyi.ky450.vo.TreeDataVo;

/**
 * 目标基本信息Service接口
 *
 * @author ruoyi
 * @date 2025-01-16
 */
public interface ITargetBaseInfoService extends IService<TargetBaseInfo> {
    /**
     * 查询目标基本信息
     *
     * @param id 目标基本信息主键
     * @return 目标基本信息
     */
    public TargetBaseInfo selectTargetBaseInfoById(Long id);

    /**
     * 查询目标基本信息列表
     *
     * @param targetBaseInfo 目标基本信息
     * @return 目标基本信息集合
     */
    public List<TargetBaseInfo> selectTargetBaseInfoList(TargetBaseInfo targetBaseInfo);

    /**
     * 新增目标基本信息
     *
     * @param targetBaseInfo 目标基本信息
     * @return 结果
     */
    public int insertTargetBaseInfo(TargetBaseInfo targetBaseInfo);

    /**
     * 修改目标基本信息
     *
     * @param targetBaseInfo 目标基本信息
     * @return 结果
     */
    public int updateTargetBaseInfo(TargetBaseInfo targetBaseInfo);

    /**
     * 批量删除目标基本信息
     *
     * @param ids 需要删除的目标基本信息主键集合
     * @return 结果
     */
    public int deleteTargetBaseInfoByIds(Integer[] ids);

    /**
     * 删除目标基本信息信息
     *
     * @param id 目标基本信息主键
     * @return 结果
     */
    public int deleteTargetBaseInfoById(Long id);

    @Deprecated
    List<TreeDataVo> fixedFacilityListTree(TreeCommonCondition condition);

    @Deprecated
    List<TreeDataVo> equipListTree(TreeCommonCondition condition);

    TargetElementInfoDto getFixedFacility(Long id);

    /**
     * 获取装备详细信息
     *
     * @param id 目标id
     * @return 装备信息
     */
    EquipAllInfoDto getEquip(Long id);

    List<TargetAttachment> getTargetAttachment(TargetAttachmentCondition condition);

    /**
     * 新增树结构列表中节点信息
     *
     * @param category 节点信息
     * @return row
     */
    int addTargetCategory(TargetCategory category);

    /**
     * 获取装备 固定设施 树结构列表
     *
     * @param condition 查询条件
     * @return list
     */
    List<Tree<String>> getCacheTrees(TreeCommonCondition condition);

    /**
     * 编辑节点属性
     *
     * @param category 节点信息
     * @return row
     */
    int editTargetCategory(TargetCategory category);

    /**
     * 新增固定设施包含要素信息
     *
     * @param targetElementInfoDto 目标信息
     * @return id
     */
    Long insertTargetFacility(TargetElementInfoDto targetElementInfoDto);

    /**
     * 新增装逼
     *
     * @param equipBaseInfo 装备信息
     * @return id
     */
    Long insertTargetEquip(EquipAllInfoDto equipBaseInfo);

    /**
     * 删除节点以及节点下目标
     *
     * @param id categoryId
     * @return row
     */
    int delTarget(Long id);

    /**
     * 修改固定设施
     *
     * @param targetElementInfoDto 固定设施信息
     * @return row
     */
    int editTargetFacility(TargetElementInfoDto targetElementInfoDto);

    /**
     * 修改装备
     *
     * @param equipBaseInfo 装备
     * @return row
     */
    boolean editTargetEquip(EquipAllInfoDto equipBaseInfo);

    /**
     * 新增附件
     *
     * @param attachment 附件信息
     * @return row
     */
    int insertTargetFile(TargetAttachment attachment);

    /**
     * 删除目标附属文件
     *
     * @param id id
     * @return row
     */
    int delTargetFile(Long id);

    /**
     * 根据国家地区构建树结构 返回上级节点id
     *
     * @param targetElementInfoDto 国家类别
     * @return id
     */
    Long getCategoryByTarget(TargetElementInfoDto targetElementInfoDto);

    /**
     * 根据一级、二级构建树结构 返回上级节点id
     *
     * @param equipAllInfoDto 类别
     * @return id
     */
    Long getCategoryByEquip(EquipAllInfoDto equipAllInfoDto);

    /**
     * 导入固定设施
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importFacility(List<TargetElementInfoDto> list, boolean updateSupport);

    /**
     * 导出固定设施
     * @param baseInfo queryInfo
     * @return list
     */
    List<TargetElementInfoDto> exportFacilityData(TargetBaseInfo baseInfo);

    /**
     * 飞机
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipAircraftDto> exportDataAir(TargetBaseInfo baseInfo);

    /**
     * 导出装甲车
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipArmoredVehicleDto> exportDataArmored(TargetBaseInfo baseInfo);

    /**
     * 导出火炮
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipCannonDto> exportDataCannon(TargetBaseInfo baseInfo);

    /**
     * 导出导弹
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipMissileDto> exportDataMissile(TargetBaseInfo baseInfo);

    /**
     * 导出雷达
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipRadarDto> exportDataRadar(TargetBaseInfo baseInfo);

    /**
     * 导出舰船
     * @param baseInfo queryInfo
     * @return list
     */
    List<EquipShipDto> exportDataShip(TargetBaseInfo baseInfo);

    /**
     * 导入装甲车
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataArmored(List<EquipArmoredVehicleDto> list, boolean updateSupport);

    /**
     * 导入火炮
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataCannon(List<EquipCannonDto> list, boolean updateSupport);

    /**
     * 导入导弹
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataMissile(List<EquipMissileDto> list, boolean updateSupport);

    /**
     * 导入雷达
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataRadar(List<EquipRadarDto> list, boolean updateSupport);

    /**
     * 导入雷达
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataShip(List<EquipShipDto> list, boolean updateSupport);

    /**
     * 导入飞机
     * @param list list
     * @param updateSupport bool
     * @return result
     */
    String importDataAir(List<EquipAircraftDto> list, boolean updateSupport);

    /**
     * 查询装备列表
     * @param targetBaseInfo queryBaseInfo
     * @return list
     */
    IPage<EquipAllInfoDto> selectEquipList(TargetBaseInfo targetBaseInfo);

    /**
     * 根据目标id删除数据
     * @param id id
     * @return row
     */
    int delTargetByTargetId(Long id);

    /**
     * 查询固定设施列表
     * @param targetBaseInfo query
     * @return list
     */
    IPage<TargetElementInfoDto> selectTargetList(TargetBaseInfo targetBaseInfo);
}
